""""""
"""
我们学习的 __init__构造方法,是python类内置的方法之一
执行内置的类方法,各有特色的功能,我们把这些内置的 类方法 称之为: 魔术方法

内置的魔术方法非常多,我们认识几种
__init__  构造方法
__str__   字符串方法
__lt__    小于.大于符号比较
__le__  小于等于, 大于等于符号比较   <= 或者 >=
__eq__   ==符号比较

"""


class 类_学生信息:
    姓名 = None   # 成员变量
    年龄 = None
    性别 = None

    # 函数 构造类 实现一次性填入信息(设置初始化行为)    特别要记住 self 关键字一定要带,只要的类里的函数
    def __init__(self, 输入姓名, 输入年龄, 输入性别):
        """
        按照顺序填入 姓名, 年龄, 性别
        :param 输入姓名:
        :param 输入年龄:
        :param 输入性别:
        """
        self.姓名 = 输入姓名
        self.年龄 = 输入年龄
        self.性别 = 输入性别

    # __str__ 转换成为字符串输出,这样对象结果就不是内存地址了
    def __str__(self):
        return f'类里的成员变量  姓名:{self.性别} 年龄:{self.年龄} 性别:{self.性别}'

    # 直接对2个对象进行比较是不可以的. 但在类里 实现__it__方法,即可以同时完成:小于符号 和 大于符号 2种比较. 返回值 False或True
    def __lt__(self, other):  # 参数 本身对象变量 和 另外对象变量
        return self.年龄 < other.年龄   # 也可以  other.年龄 > self.年龄
    """特别说明这里面 self默认要小于other,这样写正确.不然返回的值,比较就反了"""

    # __le__小于等于, 大于等于符号比较 <= 或者 >= ,返回值 False或True
    def __le__(self, other):
        return other.年龄 >= self.年龄   # 也可以  self.年龄 <= other.年龄
    """特别说明这里面 self默认要小于other,这样写正确.不然返回的值,比较就反了"""

    # 比较2个是否相等  如果不加这个魔术方法,比较的是2个对象的地址 加上这个魔术方法比较的就是2给类成员的变量
    def __eq__(self, other):
        return self.性别 == other.性别


class 类_员工信息:
    姓名 = None   # 成员变量
    年龄 = None
    性别 = None

    def __init__(self, 输入姓名, 输入年龄, 输入性别):
        self.姓名 = 输入姓名
        self.年龄 = 输入年龄
        self.性别 = 输入性别

# ---------------------------------------------------


学生1 = 类_学生信息("孙新罡", 37, '男')
学生2 = 类_学生信息("海燕", 22, '女')
学生3 = 类_学生信息("小蜜", 22, '女')
学生4 = 类_学生信息("张岩", 38, '男')

员工1 = 类_学生信息('一', 66, '男')  # 加入另外一个类的 对象
print("__str__")
print(学生1)       # 输出的都是内存地址,不是具体变量值
print(str(学生1))  # __str__ 转换成为字符串输出,这样对象结果就不是内存地址了

print("__lt__")
print(学生1 > 学生2)  # 返回值 False或True


print(员工1 > 学生1)   # 另外一个类的 对象,也可以比较

print("__le__")
print(学生2 >= 学生3)  # 因为相同所以 True
print(学生1 >= 学生3)

print('__eq__')
print(学生1 == 学生4)  # 比较性别

"""
再次特别说明这里面 self默认要小于other
< 号一定不要写错,不然比较的返回值是相反的

暂时不清楚为什么,到时补充 2023年3月11日
"""